#include <iostream>
#include <string>
#include <memory>

// 简历抽象类
class Resume {
protected:
    virtual void SetPersonalInfo() {}
    virtual void SetEducation() {}
    virtual void SetWorkExp() {}

public:
    void FillResume() {
        SetPersonalInfo();
        SetEducation();
        SetWorkExp();
    }
};

class ResumeA : public Resume {
protected:
    virtual void SetPersonalInfo() {
        std::cout << "A's PersonalInfo" << std::endl;
    }
    virtual void SetEducation() {
        std::cout << "A's Education" << std::endl;
    }
    virtual void SetWorkExp() {
        std::cout << "A's WorkExperience" << std::endl;
    }
};

class ResumeB : public Resume {
protected:
    virtual void SetPersonalInfo() {
        std::cout << "B's PersonalInfo" << std::endl;
    }
    virtual void SetEducation() {
        std::cout << "B's Education" << std::endl;
    }
    virtual void SetWorkExp() {
        std::cout << "B's WorkExperience" << std::endl;
    }
};


int main() {
    std::cout << "hello template!!!" << std::endl;
    auto r1 = std::make_unique<ResumeA>();
    r1->FillResume();

    auto r2 = std::make_unique<ResumeB>();
    r2->FillResume();
    return 0;
}